package com.nf.action;

import com.nf.entity.Student;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import java.util.ArrayList;
/**
 * 问题：为什么Struts中的Action要添加@Scope("prototype"),而SpringMVC就不用？
 * 1.SpringMVC，假如添加了@Scope("prototype")，也不会错
 * 2.默认是单例模式，这是spring推荐的配置，它只有1个实例，
 * 这样的好处，节省了创建实例的时间和内容
 * 3.如果在Struts中，单例是出问题的，共享变量
 * 4.但是在SpringMVC中，虽然使用了单例模式，但是
 * 内部SpringMVC采用了ThreadLocal技术来保证线程安全。
 * 虽然只有1个实例，但是不同线程的数据是相互隔离的。
 */
@Controller
@RequestMapping("/test")
public class Hello140 {

    @RequestMapping("/hihihi")
    public String hello(Model model){
        model.addAttribute("username","你好");
        System.out.println("hi140");
        return "hi";
    }

    @RequestMapping("/hiStudent")
    public @ResponseBody Student hiStudent(){
        Student s1 = new Student();
        s1.setStudentId(1);
        s1.setStudentame("小明");
        s1.setMajor("计算机编程");

        return s1;
    }

    @RequestMapping("/hiStudentList")
    public @ResponseBody List<Student> hiStudent2(){

        List<Student> studentList = new ArrayList();
        Student s1 = new Student();
        s1.setStudentId(1);
        s1.setStudentame("小明");
        s1.setMajor("计算机编程");

        Student s2 = new Student();
        s2.setStudentId(2);
        s2.setStudentame("小军");
        s2.setMajor("小儿科");

        studentList.add(s1);
        studentList.add(s2);
        return studentList;
    }
}
